package com.xjgc.ws.eip.dao;

import com.xjgc.common.config.DbConn;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Iterator;

/*
 * EIP销售订单接口
 */
public class ZxjEip2cVbeln_old {

    @Autowired
    DbConn db;
    public String vbeln(String xmlData) throws SQLException {
        // TODO Auto-generated method stub
        String rs = null;
        PreparedStatement inPst = null;
        PreparedStatement uptPst = null;

        // 定义执行SQL脚本
        String inSql = "INSERT INTO zxj_eip_2cvbeln(no,customerorderno,customername,suppliername,projectname,orderdate,demanddate,shipmentdate,status,deliverystatus,tags,labels,ioflag,bstkd,categorycode,mstatus) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; // 16插入SQL
        String uptSql = "update zxj_eip_2cvbeln set customerorderno=?,customername=?,suppliername=?,projectname=?,orderdate=?,demanddate=?,shipmentdate=?,status=?,deliverystatus=?,tags=?,labels=?,ioflag=?,bstkd=?,categorycode=?,mstatus=? where no=?"; // 16插入SQL
        // 创建数据库连接
        inPst = db.getConnetion().prepareStatement(inSql);
        uptPst = db.getConnetion().prepareStatement(uptSql);
        int count = 0;
        // 解析xml文件
        Document doc = null;
        String eip1 = ""; // 上一条eip关键字段组合数据

        try {
            doc = DocumentHelper.parseText(xmlData);
            Element root = doc.getRootElement();
            Iterator<?> it = root.elementIterator();
            while (it.hasNext()) {
                Element element = (Element) it.next();

                String vbeln = element.elementText("VBELN");
                String bstkde = element.elementText("BSTKD_E");//国网采购订单号
                String bstkd = element.elementText("BSTKD");//销售订单合同号
                String khmc = element.elementText("KHMC");
                String vtext = "许继集团"+element.elementText("VTEXT").replace("销售组织", "");
                String bname = element.elementText("BNAME");
                String s_bstdk = element.elementText("BSTDK");
                if(s_bstdk.equals("00000000")) {
                    s_bstdk ="19000101";
                }
                Timestamp bstdk = StringTotimeStamp(s_bstdk);
                String s_vdatu = element.elementText("VDATU");
                if(s_vdatu.equals("00000000")) {
                    s_vdatu ="19000101";
                }
                Timestamp vdatu = StringTotimeStamp(s_vdatu);
                String s_wqfdt = element.elementText("WQFDT");
                if(s_wqfdt.equals("00000000")) {
                    s_wqfdt ="19000101";
                }
                Timestamp wqfdt = StringTotimeStamp(s_wqfdt);
                String abstk = element.elementText("ABSTK");
                String lfgsk = element.elementText("LFGSK");
                String regio = element.elementText("REGIO");

                String eip2 = vbeln + bstkde + khmc + vtext + bname + bstdk + vdatu + wqfdt + abstk + lfgsk;// 将eip所有必填字段都加上   4000450876

                if (eip1==eip2||eip1.equals(eip2)) {// 比对上下两条不一致，执行插入判断逻辑
                }else {
                    if (isSGxm(bstkd,khmc,bstkde)) {// 是否为国网订单
                        if (queryData(vbeln)) {// true 表中无此数据需要插入

                            inPst.setString(1, vbeln);// no销售凭证/销售订单编号 Y
                            inPst.setString(2, bstkde);// customerorderno国网采购订单编号/客户采购订单标号 Y
                            inPst.setString(3, khmc);// customername采购单位/客户名称 Y
                            inPst.setString(4, vtext);// suppliername供应商名称/销售组织 -描述 Y
                            inPst.setString(5, bname); // projectname项目名称/销售订单项目短文本 Y
                            inPst.setTimestamp(6, bstdk);// orderdate订单日期/采购订单日期 Y
                            inPst.setTimestamp(7, vdatu);// demanddate需求日期/请求交货日期 Y
                            inPst.setTimestamp(8, wqfdt);// shipmentdate发货日期/完全发货日期 Y
                            inPst.setString(9, abstk);// status销售订单状态/销售订单状态 Y
                            inPst.setString(10, lfgsk);// deliverystatus发货状态/销售订单发货状态 Y
                            inPst.setString(11, regio);// tags客户所属省份 ***需截取***
                            inPst.setString(12, "");// labels 备用字段
                            inPst.setString(13, "1"); // ioflag 代理服务读取状态 0:已读 1:未读
                            inPst.setString(14, bstkd); // 销售订单合同号
                            inPst.setString(15, "20"); // 销售订单合同号
                            inPst.setString(16, "1"); // 新增修改标志
                            // 插入更新数据
                            int row = inPst.executeUpdate();
                            if (row > 0) {
                                count++;
                            }
                        }else {//false  表中有此数据需要修改

                            uptPst.setString(1, bstkde);// customerorderno国网采购订单编号/客户采购订单标号 Y
                            uptPst.setString(2, khmc);// customername采购单位/客户名称 Y
                            uptPst.setString(3, vtext);// suppliername供应商名称/销售组织 -描述 Y
                            uptPst.setString(4, bname); // projectname项目名称/销售订单项目短文本 Y
                            uptPst.setTimestamp(5, bstdk);// orderdate订单日期/采购订单日期 Y
                            uptPst.setTimestamp(6, vdatu);// demanddate需求日期/请求交货日期 Y
                            uptPst.setTimestamp(7, wqfdt);// shipmentdate发货日期/完全发货日期 Y
                            uptPst.setString(8, abstk);// status销售订单状态/销售订单状态 Y
                            uptPst.setString(9, lfgsk);// deliverystatus发货状态/销售订单发货状态 Y
                            uptPst.setString(10, regio);// tags客户所属省份 ***需截取***
                            uptPst.setString(11, "");// labels 备用字段
                            uptPst.setString(12, "1"); // ioflag 代理服务读取状态 0:已读 1:未读
                            uptPst.setString(13, bstkd); // 销售订单合同号
                            uptPst.setString(14, "20"); // 销售订单合同号
                            uptPst.setString(15, "2"); // 新增修改标志
                            uptPst.setString(16, vbeln);// no销售凭证/销售订单编号 Y
                            // 插入更新数据
                            int row = uptPst.executeUpdate();
                            if (row > 0) {
                                count++;
                            }
                        }
                    }
                    eip1 = eip2;
                }
            }
            if (count > 0) {
                rs = "0";// 执行成功
            }
        } catch (DocumentException e1) {
            rs = e1.toString();// 执行失败
            e1.printStackTrace();
        }finally {
            // 关闭连接
            inPst.close();
            db.closeCn();
        }
        return rs;
    }

    /*
     * 查询EIP 销售订单表 zxjeip2cvbeln是否存在
     * 传入参数字段均不能为空
     */
    public boolean queryData(String vbeln) throws SQLException {
        boolean bl = true;

        String sql = "select count(*) \"counts\" from zxj_eip_2cvbeln where no='" + vbeln + "'";
        ResultSet rs = null;
        PreparedStatement pst = null;
        DbConn db = new DbConn();
        pst = db.getConnetion().prepareStatement(sql);
        rs = pst.executeQuery();
        while(rs.next()) {
            if (rs.getInt("counts") > 0) {
                bl = false;
            }
        }
        pst.close();
        db.closeCn();

        return bl;
    }

    /*
     * 判定是否为国网项目 根据采购合同编号 第5位和第11位或第6位和12位判定为G字母
     */
    public boolean isSGxm(String bstkd ,String khmc,String bstkde) {
        boolean bl = false;
        char c1 = bstkd.charAt(0);
        if ('A' <= c1 && c1 <= 'Z'&& bstkd.length()>11) {// 判断第一个字符是否为大写字母
            if (bstkd.charAt(5) == 'G' && bstkd.charAt(11) == 'G') {
                if(khmc.substring(0,2).equals("国网")) {
                    if(!bstkde.trim().equals("")) {
                        bl = true;
                    }
                }
            }
        } else if(bstkd.length()>10){
            if (bstkd.charAt(4) == 'G' && bstkd.charAt(10) == 'G') {
                if(khmc.substring(0,2).equals("国网")) {
                    if(!bstkde.trim().equals("")) {
                        bl = true;
                    }
                }
            }
        }
        return bl;
    }
    /*
     *String转换Timestamp
     */
    public Timestamp StringTotimeStamp(String dateString){
        if(dateString.length()<10) {
            dateString = dateString.substring(0, 4)+"-"+dateString.substring(4, 6)+"-"+dateString.substring(6, 8);
        }
        StringBuffer ds=new StringBuffer(dateString);
        if(dateString.length()>10){
            Timestamp ts = Timestamp.valueOf(dateString);
            return ts;
        }else{
            ds.append(" 00:00:00");
            Timestamp ts = Timestamp.valueOf(ds.toString());
            return ts;
        }
    }
}
